/*直接做，系统不认哈哈哈，来看看参考答案怎么做的吧*/
// #include <bits/stdc++.h>
// using namespace std;
// const int M = 100000;
// int n, a[M];
// int main()
// {
// 	cin >> n;
// 	int t = n;
// 	for (int i = 0; i < n; i++)
// 	{
// 		cin >> a[i];
// 	}
// 	for (int i = 0; i < n; i++)
// 	{
// 		if (((a[i + 1] - a[i] == 1) && (a[i + 2] - a[i + 1] == 1)) || ((a[i] - a[i + 1] == 1) && (a[i + 1] - a[i + 2] == 1)))
// 		{
// 			t--;
// 		}
// 	}
// 	cout << t << endl;
// 	return 0;
// }
#include <bits/stdc++.h>
using namespace std;
// 双指针，右指针往前，左指针不动，直到右指针指的数与左指针相差大于一，左指针往前一位，且需要删除
// 定义堆来进行删除操作。定义一个大根堆和一个小根堆，当两个堆头差值大于1时，删除
const int M = 100000;
int n, a[M], ans;
priority_queue<int> max2, maxDel;								  // 大根堆
priority_queue<int, vector<int>, std::greater<int>> min2, minDel; // 小根堆

int main()
{
	cin >> n;
	for (int i = 1, j = 1; i <= n; i++)
	{
		cin >> a[i];
		max2.push(a[i]);
		min2.push(a[i]);
		while (max2.top() - min2.top() > 1)
		{
			maxDel.push(a[j]);
			minDel.push(a[j]);
			j++; // j指针往前跑
			while (maxDel.size() && max2.top() == maxDel.top())
				max2.pop(), maxDel.pop();
			while (minDel.size() && min2.top() == minDel.top())
				min2.pop(), minDel.pop();
		}
		ans = max(ans, i - j + 1);
	}
	cout << ans;
	return 0;
}